﻿using System;
using OpenTK;

namespace Mono.Rift.Core.Graphics
{
	public static class MatrixExtensions
	{
		public static Matrix4 asMatrix4(this Vector4 v)
		{
			var ww = v.W * v.W;
			var xx = v.X * v.X;
			var yy = v.Y * v.Y;
			var zz = v.Z * v.Z;

			return new Matrix4 (
				ww + xx - yy - zz, // m11
				2.0f * (v.X * v.Y - v.W * v.Z), // m12
				2.0f * (v.X * v.Z + v.W * v.Y), // m13
				0, // m14

				2.0f * (v.X * v.Y + v.W * v.Z), // m21
				ww - xx + yy - zz, // m22
				2.0f * (v.Y * v.Z - v.W * v.X), // m23
				0, // m24

				2.0f * (v.X * v.Z - v.W * v.Y), // m31
				2.0f * (v.Y * v.Z + v.W * v.X), // m32
				ww - xx - yy + zz, // m33
				0.0f, // m34

				0, 0, 0, 1.0f);
		}
	}
}

